#ifndef LOGGING_H_
#define LOGGING_H_

#include <iostream>
#include <string>

namespace ComputingObjects {

	class Logger {
		public:
			
			enum logLevel {
				ERROR,
				WARN,
				INFO,
				DEBUG
			};
			
		
			Logger(std::string prefix = "", enum logLevel level = INFO);
			virtual ~Logger();
			
			void setErrorStream(std::ostream& stream);
			void setWarnStream(std::ostream& stream);
			void setInfoStream(std::ostream& stream);
			void setDebugStream(std::ostream& stream);
			
			void error(std::stringstream& data);
			void warn(std::stringstream& data);
			void info(std::stringstream& data);
			void debug(std::stringstream& data);
			
			std::ostream& operator<<(enum logLevel);
			std::ostream& operator<<(const char* aStream);
			
		protected:
			std::string myPrefix;
			enum logLevel myLevel;
			
			std::ostream* myErrorStream;
			std::ostream* myWarnStream;
			std::ostream* myInfoStream;
			std::ostream* myDebugStream;
						
	};

}


#endif /*LOGGING_H_*/
